authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-03-26 05:21:28-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-03-26 05:21:28-04:00
log7ce753a16b0c16b4c6494467f42f2d5fe9a235e6
treef88fa21d9548b0392252a1f835ae68c3ef574f24
parent451ce090674d6d5f2c23e6667047e1e479917c93

replace "&&" and "||" with "and" and "or"

closes #272

19 files changed, 46 insertions(+), 111 deletions(-)

doc/langref.md+3-3
......@@ -69,7 +69,7 @@ UnwrapError = "%%" option("|" Symbol "|") Expression
6969
7070AssignmentExpression = UnwrapExpression AssignmentOperator UnwrapExpression | UnwrapExpression
7171
72AssignmentOperator = "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | "&=" | "^=" | "|=" | "&&=" | "||=" | "*%=" | "+%=" | "-%=" | "<<%="
72AssignmentOperator = "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | "&=" | "^=" | "|=" | "*%=" | "+%=" | "-%=" | "<<%="
7373
7474BlockExpression = IfExpression | Block | WhileExpression | ForExpression | SwitchExpression | CompTimeExpression | TryExpression
7575
......@@ -85,7 +85,7 @@ WhileExpression = option("inline") "while" "(" Expression option(";" Expression)
8585
8686ForExpression = option("inline") "for" "(" Expression ")" option("|" option("*") Symbol option("," Symbol) "|") Expression
8787
88BoolOrExpression = BoolAndExpression "||" BoolOrExpression | BoolAndExpression
88BoolOrExpression = BoolAndExpression "or" BoolOrExpression | BoolAndExpression
8989
9090ReturnExpression = option("%" | "?") "return" option(Expression)
9191
......@@ -101,7 +101,7 @@ IfVarExpression = "if" "(" ("const" | "var") option("*") Symbol option(":" TypeE
101101
102102Else = "else" Expression
103103
104BoolAndExpression = ComparisonExpression "&&" BoolAndExpression | ComparisonExpression
104BoolAndExpression = ComparisonExpression "and" BoolAndExpression | ComparisonExpression
105105
106106ComparisonExpression = BinaryOrExpression ComparisonOperator BinaryOrExpression | BinaryOrExpression
107107
doc/vim/syntax/zig.vim+2-2
......@@ -11,7 +11,7 @@ let b:current_syntax = "zig"
1111syn keyword zigStorage const var extern packed export pub noalias inline comptime nakedcc coldcc volatile
1212syn keyword zigStructure struct enum union
1313syn keyword zigStatement goto break return continue asm defer unreachable
14syn keyword zigConditional if else switch try
14syn keyword zigConditional if else switch try and or
1515syn keyword zigRepeat while for
1616
1717syn keyword zigConstant null undefined this
......@@ -22,7 +22,7 @@ syn keyword zigType c_short c_ushort c_int c_uint c_long c_ulong c_longlong c_ul
2222
2323syn keyword zigBoolean true false
2424
25syn match zigOperator display "\%(+%\?\|-%\?\|/\|*%\?\|=\|\^\|&\|?\||\|!\|>\|<\|%\|<<%\?\|>>\|&&\|||\)=\?"
25syn match zigOperator display "\%(+%\?\|-%\?\|/\|*%\?\|=\|\^\|&\|?\||\|!\|>\|<\|%\|<<%\?\|>>\)=\?"
2626syn match zigArrowCharacter display "->"
2727
2828syn match zigDecNumber display "\<[0-9]*\%(.[0-9]\+\)\=\%([eE][+-]\?[0-9]\+\)\="
src/parser.cpp+6-17
......@@ -1007,7 +1007,6 @@ static PrefixOp tok_to_prefix_op(Token *token) {
10071007 case TokenIdPercent: return PrefixOpError;
10081008 case TokenIdPercentPercent: return PrefixOpUnwrapError;
10091009 case TokenIdDoubleQuestion: return PrefixOpUnwrapMaybe;
1010 case TokenIdBoolAnd: return PrefixOpAddressOf;
10111010 case TokenIdStarStar: return PrefixOpDereference;
10121011 default: return PrefixOpInvalid;
10131012 }
......@@ -1036,15 +1035,7 @@ static AstNode *ast_parse_prefix_op_expr(ParseContext *pc, size_t *token_index,
10361035
10371036 AstNode *node = ast_create_node(pc, NodeTypePrefixOpExpr, token);
10381037 AstNode *parent_node = node;
1039 if (token->id == TokenIdBoolAnd) {
1040 // pretend that we got 2 ampersand tokens
1041
1042 parent_node = ast_create_node(pc, NodeTypePrefixOpExpr, token);
1043 parent_node->data.prefix_op_expr.primary_expr = node;
1044 parent_node->data.prefix_op_expr.prefix_op = PrefixOpAddressOf;
1045
1046 node->column += 1;
1047 } else if (token->id == TokenIdStarStar) {
1038 if (token->id == TokenIdStarStar) {
10481039 // pretend that we got 2 star tokens
10491040
10501041 parent_node = ast_create_node(pc, NodeTypePrefixOpExpr, token);
......@@ -1362,7 +1353,7 @@ static AstNode *ast_parse_comparison_expr(ParseContext *pc, size_t *token_index,
13621353}
13631354
13641355/*
1365BoolAndExpression : ComparisonExpression token(BoolAnd) BoolAndExpression | ComparisonExpression
1356BoolAndExpression = ComparisonExpression "and" BoolAndExpression | ComparisonExpression
13661357 */
13671358static AstNode *ast_parse_bool_and_expr(ParseContext *pc, size_t *token_index, bool mandatory) {
13681359 AstNode *operand_1 = ast_parse_comparison_expr(pc, token_index, mandatory);
......@@ -1371,7 +1362,7 @@ static AstNode *ast_parse_bool_and_expr(ParseContext *pc, size_t *token_index, b
13711362
13721363 while (true) {
13731364 Token *token = &pc->tokens->at(*token_index);
1374 if (token->id != TokenIdBoolAnd)
1365 if (token->id != TokenIdKeywordAnd)
13751366 return operand_1;
13761367 *token_index += 1;
13771368
......@@ -1629,7 +1620,7 @@ static AstNode *ast_parse_variable_declaration_expr(ParseContext *pc, size_t *to
16291620}
16301621
16311622/*
1632BoolOrExpression : BoolAndExpression token(BoolOr) BoolOrExpression | BoolAndExpression
1623BoolOrExpression = BoolAndExpression "or" BoolOrExpression | BoolAndExpression
16331624*/
16341625static AstNode *ast_parse_bool_or_expr(ParseContext *pc, size_t *token_index, bool mandatory) {
16351626 AstNode *operand_1 = ast_parse_bool_and_expr(pc, token_index, mandatory);
......@@ -1638,7 +1629,7 @@ static AstNode *ast_parse_bool_or_expr(ParseContext *pc, size_t *token_index, bo
16381629
16391630 while (true) {
16401631 Token *token = &pc->tokens->at(*token_index);
1641 if (token->id != TokenIdBoolOr)
1632 if (token->id != TokenIdKeywordOr)
16421633 return operand_1;
16431634 *token_index += 1;
16441635
......@@ -1924,14 +1915,12 @@ static BinOpType tok_to_ass_op(Token *token) {
19241915 case TokenIdBitAndEq: return BinOpTypeAssignBitAnd;
19251916 case TokenIdBitXorEq: return BinOpTypeAssignBitXor;
19261917 case TokenIdBitOrEq: return BinOpTypeAssignBitOr;
1927 case TokenIdBoolAndEq: return BinOpTypeAssignBoolAnd;
1928 case TokenIdBoolOrEq: return BinOpTypeAssignBoolOr;
19291918 default: return BinOpTypeInvalid;
19301919 }
19311920}
19321921
19331922/*
1934AssignmentOperator = "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | "&=" | "^=" | "|=" | "&&=" | "||=" | "*%=" | "+%=" | "-%=" | "<<%="
1923AssignmentOperator = "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | "&=" | "^=" | "|=" | "*%=" | "+%=" | "-%=" | "<<%="
19351924*/
19361925static BinOpType ast_parse_ass_op(ParseContext *pc, size_t *token_index, bool mandatory) {
19371926 Token *token = &pc->tokens->at(*token_index);
src/tokenizer.cpp+4-44
......@@ -107,6 +107,7 @@ struct ZigKeyword {
107107};
108108
109109static const struct ZigKeyword zig_keywords[] = {
110 {"and", TokenIdKeywordAnd},
110111 {"asm", TokenIdKeywordAsm},
111112 {"break", TokenIdKeywordBreak},
112113 {"coldcc", TokenIdKeywordColdCC},
......@@ -128,6 +129,7 @@ static const struct ZigKeyword zig_keywords[] = {
128129 {"nakedcc", TokenIdKeywordNakedCC},
129130 {"noalias", TokenIdKeywordNoAlias},
130131 {"null", TokenIdKeywordNull},
132 {"or", TokenIdKeywordOr},
131133 {"packed", TokenIdKeywordPacked},
132134 {"pub", TokenIdKeywordPub},
133135 {"return", TokenIdKeywordReturn},
......@@ -189,10 +191,8 @@ enum TokenizeState {
189191 TokenizeStateSawDash,
190192 TokenizeStateSawMinusPercent,
191193 TokenizeStateSawAmpersand,
192 TokenizeStateSawAmpersandAmpersand,
193194 TokenizeStateSawCaret,
194195 TokenizeStateSawPipe,
195 TokenizeStateSawPipePipe,
196196 TokenizeStateLineComment,
197197 TokenizeStateLineString,
198198 TokenizeStateLineStringEnd,
......@@ -824,10 +824,6 @@ void tokenize(Buf *buf, Tokenization *out) {
824824 break;
825825 case TokenizeStateSawAmpersand:
826826 switch (c) {
827 case '&':
828 set_token_id(&t, t.cur_tok, TokenIdBoolAnd);
829 t.state = TokenizeStateSawAmpersandAmpersand;
830 break;
831827 case '=':
832828 set_token_id(&t, t.cur_tok, TokenIdBitAndEq);
833829 end_token(&t);
......@@ -840,20 +836,6 @@ void tokenize(Buf *buf, Tokenization *out) {
840836 continue;
841837 }
842838 break;
843 case TokenizeStateSawAmpersandAmpersand:
844 switch (c) {
845 case '=':
846 set_token_id(&t, t.cur_tok, TokenIdBoolAndEq);
847 end_token(&t);
848 t.state = TokenizeStateStart;
849 break;
850 default:
851 t.pos -= 1;
852 end_token(&t);
853 t.state = TokenizeStateStart;
854 continue;
855 }
856 break;
857839 case TokenizeStateSawCaret:
858840 switch (c) {
859841 case '=':
......@@ -870,10 +852,6 @@ void tokenize(Buf *buf, Tokenization *out) {
870852 break;
871853 case TokenizeStateSawPipe:
872854 switch (c) {
873 case '|':
874 set_token_id(&t, t.cur_tok, TokenIdBoolOr);
875 t.state = TokenizeStateSawPipePipe;
876 break;
877855 case '=':
878856 set_token_id(&t, t.cur_tok, TokenIdBitOrEq);
879857 end_token(&t);
......@@ -886,20 +864,6 @@ void tokenize(Buf *buf, Tokenization *out) {
886864 continue;
887865 }
888866 break;
889 case TokenizeStateSawPipePipe:
890 switch (c) {
891 case '=':
892 set_token_id(&t, t.cur_tok, TokenIdBoolOrEq);
893 end_token(&t);
894 t.state = TokenizeStateStart;
895 break;
896 default:
897 t.pos -= 1;
898 end_token(&t);
899 t.state = TokenizeStateStart;
900 continue;
901 }
902 break;
903867 case TokenizeStateSawSlash:
904868 switch (c) {
905869 case '/':
......@@ -1401,10 +1365,8 @@ void tokenize(Buf *buf, Tokenization *out) {
14011365 case TokenizeStateSawPlus:
14021366 case TokenizeStateSawDash:
14031367 case TokenizeStateSawAmpersand:
1404 case TokenizeStateSawAmpersandAmpersand:
14051368 case TokenizeStateSawCaret:
14061369 case TokenizeStateSawPipe:
1407 case TokenizeStateSawPipePipe:
14081370 case TokenizeStateSawEq:
14091371 case TokenizeStateSawBang:
14101372 case TokenizeStateSawLessThan:
......@@ -1463,10 +1425,6 @@ const char * token_name(TokenId id) {
14631425 case TokenIdBitShiftRight: return ">>";
14641426 case TokenIdBitShiftRightEq: return ">>=";
14651427 case TokenIdBitXorEq: return "^=";
1466 case TokenIdBoolAnd: return "&&";
1467 case TokenIdBoolAndEq: return "&&=";
1468 case TokenIdBoolOr: return "||";
1469 case TokenIdBoolOrEq: return "||=";
14701428 case TokenIdCharLiteral: return "CharLiteral";
14711429 case TokenIdCmpEq: return "==";
14721430 case TokenIdCmpGreaterOrEq: return ">=";
......@@ -1484,6 +1442,7 @@ const char * token_name(TokenId id) {
14841442 case TokenIdEof: return "EOF";
14851443 case TokenIdEq: return "=";
14861444 case TokenIdFatArrow: return "=>";
1445 case TokenIdKeywordAnd: return "and";
14871446 case TokenIdKeywordAsm: return "asm";
14881447 case TokenIdKeywordBreak: return "break";
14891448 case TokenIdKeywordColdCC: return "coldcc";
......@@ -1505,6 +1464,7 @@ const char * token_name(TokenId id) {
15051464 case TokenIdKeywordNakedCC: return "nakedcc";
15061465 case TokenIdKeywordNoAlias: return "noalias";
15071466 case TokenIdKeywordNull: return "null";
1467 case TokenIdKeywordOr: return "or";
15081468 case TokenIdKeywordPacked: return "packed";
15091469 case TokenIdKeywordPub: return "pub";
15101470 case TokenIdKeywordReturn: return "return";
src/tokenizer.hpp+2-4
......@@ -27,10 +27,6 @@ enum TokenId {
2727 TokenIdBitShiftRight,
2828 TokenIdBitShiftRightEq,
2929 TokenIdBitXorEq,
30 TokenIdBoolAnd,
31 TokenIdBoolAndEq,
32 TokenIdBoolOr,
33 TokenIdBoolOrEq,
3430 TokenIdCharLiteral,
3531 TokenIdCmpEq,
3632 TokenIdCmpGreaterOrEq,
......@@ -48,6 +44,7 @@ enum TokenId {
4844 TokenIdEof,
4945 TokenIdEq,
5046 TokenIdFatArrow,
47 TokenIdKeywordAnd,
5148 TokenIdKeywordAsm,
5249 TokenIdKeywordBreak,
5350 TokenIdKeywordColdCC,
......@@ -69,6 +66,7 @@ enum TokenId {
6966 TokenIdKeywordNakedCC,
7067 TokenIdKeywordNoAlias,
7168 TokenIdKeywordNull,
69 TokenIdKeywordOr,
7270 TokenIdKeywordPacked,
7371 TokenIdKeywordPub,
7472 TokenIdKeywordReturn,
std/cstr.zig+1-1
......@@ -14,7 +14,7 @@ pub fn len(ptr: &const u8) -> usize {
1414
1515pub fn cmp(a: &const u8, b: &const u8) -> i8 {
1616 var index: usize = 0;
17 while (a[index] == b[index] && a[index] != 0; index += 1) {}
17 while (a[index] == b[index] and a[index] != 0; index += 1) {}
1818 if (a[index] > b[index]) {
1919 return 1;
2020 } else if (a[index] < b[index]) {
std/darwin.zig+1-1
......@@ -56,7 +56,7 @@ pub fn exit(status: usize) -> noreturn {
5656/// Get the errno from a syscall return value, or 0 for no error.
5757pub fn getErrno(r: usize) -> usize {
5858 const signed_r = *(&isize)(&r);
59 if (signed_r > -4096 && signed_r < 0) usize(-signed_r) else 0
59 if (signed_r > -4096 and signed_r < 0) usize(-signed_r) else 0
6060}
6161
6262pub fn write(fd: i32, buf: &const u8, count: usize) -> usize {
std/debug.zig+3-3
......@@ -335,7 +335,7 @@ fn parseAbbrevTable(in_stream: &io.InStream) -> %AbbrevTable {
335335 while (true) {
336336 const attr_id = %return readULeb128(in_stream);
337337 const form_id = %return readULeb128(in_stream);
338 if (attr_id == 0 && form_id == 0)
338 if (attr_id == 0 and form_id == 0)
339339 break;
340340 %return attrs.append(AbbrevAttr {
341341 .attr_id = attr_id,
......@@ -447,7 +447,7 @@ fn scanAllCompileUnits(st: &ElfStackTrace) -> %void {
447447
448448fn findCompileUnit(st: &ElfStackTrace, target_address: u64) -> ?&const CompileUnit {
449449 for (st.compile_unit_list.toSlice()) |*compile_unit| {
450 if (target_address >= compile_unit.pc_start && target_address < compile_unit.pc_end)
450 if (target_address >= compile_unit.pc_start and target_address < compile_unit.pc_end)
451451 return compile_unit;
452452 }
453453 return null;
......@@ -499,7 +499,7 @@ fn readILeb128(in_stream: &io.InStream) -> %i64 {
499499 shift += 7;
500500
501501 if ((byte & 0b10000000) == 0) {
502 if (shift < @sizeOf(i64) * 8 && (byte & 0b01000000) != 0)
502 if (shift < @sizeOf(i64) * 8 and (byte & 0b01000000) != 0)
503503 result |= -(i64(1) << shift);
504504
505505 return result;
std/elf.zig+4-4
......@@ -152,8 +152,8 @@ pub const Elf = struct {
152152 %return elf.in_stream.seekForward(4);
153153
154154 const header_size = %return elf.in_stream.readInt(elf.is_big_endian, u16);
155 if ((elf.is_64 && header_size != 64) ||
156 (!elf.is_64 && header_size != 52))
155 if ((elf.is_64 and header_size != 64) or
156 (!elf.is_64 and header_size != 52))
157157 {
158158 return error.InvalidFormat;
159159 }
......@@ -172,7 +172,7 @@ pub const Elf = struct {
172172 const end_ph = %return math.addOverflow(u64, elf.program_header_offset, ph_byte_count);
173173
174174 const stream_end = %return elf.in_stream.getEndPos();
175 if (stream_end < end_sh || stream_end < end_ph) {
175 if (stream_end < end_sh or stream_end < end_ph) {
176176 return error.InvalidFormat;
177177 }
178178
......@@ -245,7 +245,7 @@ pub const Elf = struct {
245245
246246 for (name) |expected_c| {
247247 const target_c = %return elf.in_stream.readByte();
248 if (target_c == 0 || expected_c != target_c) goto next_section;
248 if (target_c == 0 or expected_c != target_c) goto next_section;
249249 }
250250
251251 {
std/fmt.zig+1-1
......@@ -33,7 +33,7 @@ pub fn format(context: var, output: fn(@typeOf(context), []const u8)->bool,
3333 switch (state) {
3434 State.Start => switch (c) {
3535 '{' => {
36 // TODO if you make this an if statement with && then it breaks
36 // TODO if you make this an if statement with `and` then it breaks
3737 if (start_index < i) {
3838 if (!output(context, fmt[start_index...i]))
3939 return false;
std/hash_map.zig+2-2
......@@ -116,7 +116,7 @@ pub fn HashMap(comptime K: type, comptime V: type,
116116 while (roll_over < hm.entries.len; roll_over += 1) {
117117 const next_index = (start_index + roll_over + 1) % hm.entries.len;
118118 const next_entry = &hm.entries[next_index];
119 if (!next_entry.used || next_entry.distance_from_start_index == 0) {
119 if (!next_entry.used or next_entry.distance_from_start_index == 0) {
120120 entry.used = false;
121121 hm.size -= 1;
122122 return;
......@@ -164,7 +164,7 @@ pub fn HashMap(comptime K: type, comptime V: type,
164164 const index = (start_index + roll_over) % hm.entries.len;
165165 const entry = &hm.entries[index];
166166
167 if (entry.used && !eql(entry.key, key)) {
167 if (entry.used and !eql(entry.key, key)) {
168168 if (entry.distance_from_start_index < distance_from_start_index) {
169169 // robin hood to the rescue
170170 const tmp = *entry;
std/io.zig+1-1
......@@ -148,7 +148,7 @@ pub const OutStream = struct {
148148 while (true) {
149149 const close_ret = system.close(self.fd);
150150 const close_err = system.getErrno(close_ret);
151 if (close_err > 0 && close_err == errno.EINTR)
151 if (close_err > 0 and close_err == errno.EINTR)
152152 continue;
153153 return;
154154 }
std/linux.zig+1-1
......@@ -227,7 +227,7 @@ pub const AF_MAX = PF_MAX;
227227/// Get the errno from a syscall return value, or 0 for no error.
228228pub fn getErrno(r: usize) -> usize {
229229 const signed_r = *(&isize)(&r);
230 if (signed_r > -4096 && signed_r < 0) usize(-signed_r) else 0
230 if (signed_r > -4096 and signed_r < 0) usize(-signed_r) else 0
231231}
232232
233233pub fn mmap(address: ?&u8, length: usize, prot: usize, flags: usize, fd: i32, offset: usize)
std/math.zig+1-1
......@@ -49,7 +49,7 @@ pub fn log(comptime base: usize, value: var) -> @typeOf(value) {
4949
5050/// x must be an integer or a float
5151/// Note that this causes undefined behavior if
52/// @typeOf(x).is_signed && x == @minValue(@typeOf(x)).
52/// @typeOf(x).is_signed and x == @minValue(@typeOf(x)).
5353pub fn abs(x: var) -> @typeOf(x) {
5454 const T = @typeOf(x);
5555 if (@isInteger(T)) {
std/net.zig+7-7
......@@ -166,11 +166,11 @@ pub fn parseIpLiteral(buf: []const u8) -> %Address {
166166
167167fn hexDigit(c: u8) -> u8 {
168168 // TODO use switch with range
169 if ('0' <= c && c <= '9') {
169 if ('0' <= c and c <= '9') {
170170 c - '0'
171 } else if ('A' <= c && c <= 'Z') {
171 } else if ('A' <= c and c <= 'Z') {
172172 c - 'A' + 10
173 } else if ('a' <= c && c <= 'z') {
173 } else if ('a' <= c and c <= 'z') {
174174 c - 'a' + 10
175175 } else {
176176 @maxValue(u8)
......@@ -194,7 +194,7 @@ fn parseIp6(buf: []const u8) -> %Address {
194194 var scope_id = false;
195195 for (buf) |c| {
196196 if (scope_id) {
197 if (c >= '0' && c <= '9') {
197 if (c >= '0' and c <= '9') {
198198 const digit = c - '0';
199199 if (@mulWithOverflow(u32, result.scope_id, 10, &result.scope_id)) {
200200 return error.Overflow;
......@@ -255,7 +255,7 @@ fn parseIp6(buf: []const u8) -> %Address {
255255// if (isdigit(*++p)) scopeid = strtoull(p, &z, 10);
256256// else z = p-1;
257257// if (*z) {
258// if (!IN6_IS_ADDR_LINKLOCAL(&a6) &&
258// if (!IN6_IS_ADDR_LINKLOCAL(&a6) and
259259// !IN6_IS_ADDR_MC_LINKLOCAL(&a6))
260260// return EAI_NONAME;
261261// scopeid = if_nametoindex(p);
......@@ -297,7 +297,7 @@ fn parseIp4(buf: []const u8) -> %u32 {
297297 index += 1;
298298 x = 0;
299299 saw_any_digits = false;
300 } else if (c >= '0' && c <= '9') {
300 } else if (c >= '0' and c <= '9') {
301301 saw_any_digits = true;
302302 const digit = c - '0';
303303 if (@mulWithOverflow(u8, x, 10, &x)) {
......@@ -310,7 +310,7 @@ fn parseIp4(buf: []const u8) -> %u32 {
310310 return error.InvalidChar;
311311 }
312312 }
313 if (index == 3 && saw_any_digits) {
313 if (index == 3 and saw_any_digits) {
314314 out_ptr[index] = x;
315315 return result;
316316 }
test/cases/bool.zig-12
......@@ -25,18 +25,6 @@ fn testBoolCmp(a: bool, b: bool) -> bool {
2525 a == b
2626}
2727
28test "shortCircuitAndOr" {
29 var a = true;
30 a &&= false;
31 assert(!a);
32 a &&= true;
33 assert(!a);
34 a ||= false;
35 assert(!a);
36 a ||= true;
37 assert(a);
38}
39
4028const global_f = false;
4129const global_t = true;
4230const not_global_f = !global_f;
test/cases/eval.zig+1-1
......@@ -167,7 +167,7 @@ fn testTryToTrickEvalWithRuntimeIf(b: bool) -> usize {
167167
168168fn max(comptime T: type, a: T, b: T) -> T {
169169 if (T == bool) {
170 return a || b;
170 return a or b;
171171 } else if (a > b) {
172172 return a;
173173 } else {
test/cases/math.zig+2-2
......@@ -59,8 +59,8 @@ test "modifyOperators" {
5959test "threeExprInARow" {
6060}
6161fn testThreeExprInARow(f: bool, t: bool) {
62 assertFalse(f || f || f);
63 assertFalse(t && t && f);
62 assertFalse(f or f or f);
63 assertFalse(t and t and f);
6464 assertFalse(1 | 2 | 4 != 7);
6565 assertFalse(3 ^ 6 ^ 8 != 13);
6666 assertFalse(7 & 14 & 28 != 4);
test/cases/misc.zig+4-4
......@@ -100,17 +100,17 @@ fn testShortCircuit(f: bool, t: bool) {
100100 var hit_3 = f;
101101 var hit_4 = f;
102102
103 if (t || {assert(f); f}) {
103 if (t or {assert(f); f}) {
104104 hit_1 = t;
105105 }
106 if (f || { hit_2 = t; f }) {
106 if (f or { hit_2 = t; f }) {
107107 assert(f);
108108 }
109109
110 if (t && { hit_3 = t; f }) {
110 if (t and { hit_3 = t; f }) {
111111 assert(f);
112112 }
113 if (f && {assert(f); f}) {
113 if (f and {assert(f); f}) {
114114 assert(f);
115115 } else {
116116 hit_4 = t;