瀏覽代碼

allow parsing `||=` and `&&=` (closes #4427)

Simon Krajewski 9 年之前
父節點
當前提交
9ec45e3ebf
共有 2 個文件被更改,包括 4 次插入0 次删除
  1. 2 0
      lexer.mll
  2. 2 0
      typer.ml

+ 2 - 0
lexer.mll

@@ -255,6 +255,8 @@ and token = parse
 	| "*=" { mk lexbuf (Binop (OpAssignOp OpMult)) }
 	| "/=" { mk lexbuf (Binop (OpAssignOp OpDiv)) }
 	| "<<=" { mk lexbuf (Binop (OpAssignOp OpShl)) }
+	| "||=" { mk lexbuf (Binop (OpAssignOp OpBoolOr)) }
+	| "&&=" { mk lexbuf (Binop (OpAssignOp OpBoolAnd)) }
 (*//| ">>=" { mk lexbuf (Binop (OpAssignOp OpShr)) } *)
 (*//| ">>>=" { mk lexbuf (Binop (OpAssignOp OpUShr)) } *)
 	| "==" { mk lexbuf (Binop OpEq) }

+ 2 - 0
typer.ml

@@ -1899,6 +1899,8 @@ let rec type_binop ctx op e1 e2 is_assign_op with_type p =
 			make_call ctx ef [et;e2] ret p
 		| AKInline _ | AKMacro _ ->
 			assert false)
+	| OpAssignOp (OpBoolAnd | OpBoolOr) ->
+		error "The operators ||= and &&= are not supported" p
 	| OpAssignOp op ->
 		(match type_access ctx (fst e1) (snd e1) MSet with
 		| AKNo s -> error ("Cannot access field or identifier " ^ s ^ " for writing") p