add permission error for attempts at redefining builtins, re: #50
This commit is contained in:
@@ -124,7 +124,14 @@ fn compile_decl(wam: &mut Machine, tl: TopLevel, queue: Vec<TopLevel>) -> EvalSe
|
|||||||
EvalSession::from(ParserError::InvalidModuleDecl),
|
EvalSession::from(ParserError::InvalidModuleDecl),
|
||||||
_ => {
|
_ => {
|
||||||
let name = try_eval_session!(if let Some(name) = tl.name() {
|
let name = try_eval_session!(if let Some(name) = tl.name() {
|
||||||
Ok(name)
|
match ClauseType::from(name.clone(), tl.arity(), None) {
|
||||||
|
ClauseType::Named(..) | ClauseType::Op(..) =>
|
||||||
|
Ok(name),
|
||||||
|
_ => {
|
||||||
|
let err_str = format!("{}/{}", name.as_str(), tl.arity());
|
||||||
|
Err(SessionError::ImpermissibleEntry(err_str))
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Err(SessionError::NamelessEntry)
|
Err(SessionError::NamelessEntry)
|
||||||
});
|
});
|
||||||
@@ -132,7 +139,7 @@ fn compile_decl(wam: &mut Machine, tl: TopLevel, queue: Vec<TopLevel>) -> EvalSe
|
|||||||
let mut code = try_eval_session!(compile_relation(&tl, false, wam.machine_flags()));
|
let mut code = try_eval_session!(compile_relation(&tl, false, wam.machine_flags()));
|
||||||
try_eval_session!(compile_appendix(&mut code, queue, false, wam.machine_flags()));
|
try_eval_session!(compile_appendix(&mut code, queue, false, wam.machine_flags()));
|
||||||
|
|
||||||
if !code.is_empty() {
|
if !code.is_empty() {
|
||||||
wam.add_user_code(name, tl.arity(), code, tl.as_predicate().ok().unwrap())
|
wam.add_user_code(name, tl.arity(), code, tl.as_predicate().ok().unwrap())
|
||||||
} else {
|
} else {
|
||||||
EvalSession::from(SessionError::ImpermissibleEntry(String::from("no code generated.")))
|
EvalSession::from(SessionError::ImpermissibleEntry(String::from("no code generated.")))
|
||||||
|
|||||||
Reference in New Issue
Block a user