From: Mark Thom Date: Thu, 6 Sep 2018 22:34:27 +0000 (-0600) Subject: add permission error for attempts at redefining builtins, re: #50 X-Git-Tag: v0.8.110~392 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=d1ec089405240816a4ae7592c3082586ceb1e8c1;p=scryer-prolog.git add permission error for attempts at redefining builtins, re: #50 --- diff --git a/src/prolog/compile.rs b/src/prolog/compile.rs index 0b9330c0..931fb37a 100644 --- a/src/prolog/compile.rs +++ b/src/prolog/compile.rs @@ -124,7 +124,14 @@ fn compile_decl(wam: &mut Machine, tl: TopLevel, queue: Vec) -> EvalSe EvalSession::from(ParserError::InvalidModuleDecl), _ => { 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 { Err(SessionError::NamelessEntry) }); @@ -132,7 +139,7 @@ fn compile_decl(wam: &mut Machine, tl: TopLevel, queue: Vec) -> EvalSe 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())); - if !code.is_empty() { + if !code.is_empty() { wam.add_user_code(name, tl.arity(), code, tl.as_predicate().ok().unwrap()) } else { EvalSession::from(SessionError::ImpermissibleEntry(String::from("no code generated.")))