/-
Copyright (c) 2018 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Leonardo de Moura
-/
prelude
import init.data.rbtree.basic init.lean.name

namespace lean
namespace ir

def reserved := [ "bool", "byte", "uint16", "uint32", "uint64", "usize",
 "int16", "int32", "int64", "float", "double", "object",
 "not", "neg", "ineg", "nat2int",
 "is_scalar", "is_shared", "is_null", "unbox", "box", "cast",
 "array_copy", "sarray_copy", "array_size", "sarray_size", "string_len",
 "succ", "tag", "tag_ref",
 "add", "sub", "mul", "div", "mod",
 "iadd", "isub", "imul", "idiv", "imod",
 "shl", "shr", "and",
 "or", "xor",
 "le", "lt", "eq", "ne",
 "ile", "ilt", "ieq", "ine",
 "array_read", "array_push",
 "string_push", "string_append", "inc_ref", "dec_ref", "dec_sref",
 "inc", "dec", "free", "dealloc", "array_pop", "sarray_pop",
 "call", "cnstr", "set", "get", "sset", "sget", "closure", "apply",
 "array", "sarray", "array_write", "phi", "ret", "case", "jmp",
 "def", "external"]

def reserved_set : rbtree string (<) :=
reserved.foldl rbtree.insert (mk_rbtree string (<))

def is_reserved (s : string) : bool :=
reserved_set.contains s

def is_reserved_name : name → bool
| (name.mk_string p s) := is_reserved s
| _                    := ff

end ir
end lean
