@@ -4,35 +4,37 @@ use rusty_parser::{AsBareName, Expression, ExpressionPos, Operator, TypeQualifie
44use rusty_variant:: Variant ;
55use std:: cmp:: Ordering ;
66
7+ /// A lookup map of resolved constant values.
78pub trait ConstLookup {
8- fn get_resolved_constant ( & self , name : & CaseInsensitiveString ) -> Option < & Variant > ;
9+ /// Gets the value ([Variant]) of a constant.
10+ fn get_const_value ( & self , name : & CaseInsensitiveString ) -> Option < & Variant > ;
911}
1012
11- /// Resolves the value ([Variant]) of a `CONST` expression.
12- pub trait ConstValueResolver < T > {
13- /// Resolves the value ([Variant]) of a `CONST` expression.
14- fn resolve_const ( & self , item : & T ) -> Result < Variant , LintErrorPos > ;
13+ /// Evaluates the value ([Variant]) of a `CONST` expression.
14+ pub trait ConstEvaluator < T > {
15+ /// Evaluates the value ([Variant]) of a `CONST` expression.
16+ fn eval_const ( & self , item : & T ) -> Result < Variant , LintErrorPos > ;
1517}
1618
17- impl < S > ConstValueResolver < Positioned < & CaseInsensitiveString > > for S
19+ impl < S > ConstEvaluator < Positioned < & CaseInsensitiveString > > for S
1820where
1921 S : ConstLookup ,
2022{
21- fn resolve_const (
23+ fn eval_const (
2224 & self ,
2325 item : & Positioned < & CaseInsensitiveString > ,
2426 ) -> Result < Variant , LintErrorPos > {
25- self . get_resolved_constant ( & item. element )
27+ self . get_const_value ( & item. element )
2628 . cloned ( )
2729 . ok_or ( LintError :: InvalidConstant . at_pos ( item. pos ) )
2830 }
2931}
3032
31- impl < S > ConstValueResolver < ExpressionPos > for S
33+ impl < S > ConstEvaluator < ExpressionPos > for S
3234where
3335 S : ConstLookup ,
3436{
35- fn resolve_const ( & self , item : & ExpressionPos ) -> Result < Variant , LintErrorPos > {
37+ fn eval_const ( & self , item : & ExpressionPos ) -> Result < Variant , LintErrorPos > {
3638 let Positioned {
3739 element : expression,
3840 pos,
4648 Expression :: Variable ( name_expr, _) => {
4749 let bare_name = name_expr. as_bare_name ( ) ;
4850 let bare_name_pos = Positioned :: new ( bare_name, * pos) ;
49- let v = self . resolve_const ( & bare_name_pos) ?;
51+ let v = self . eval_const ( & bare_name_pos) ?;
5052 if let Some ( qualifier) = name_expr. qualifier ( ) {
5153 let v_q = match v {
5254 Variant :: VDouble ( _) => TypeQualifier :: HashDouble ,
6870 }
6971 }
7072 Expression :: BinaryExpression ( op, left, right, _) => {
71- let v_left = self . resolve_const ( left) ?;
72- let v_right = self . resolve_const ( right) ?;
73+ let v_left = self . eval_const ( left) ?;
74+ let v_right = self . eval_const ( right) ?;
7375 ( match * op {
7476 Operator :: Less => v_left
7577 . try_cmp ( & v_right)
@@ -109,15 +111,15 @@ where
109111 . map_err ( |e| e. at ( right) )
110112 }
111113 Expression :: UnaryExpression ( op, child) => {
112- let v = self . resolve_const ( child) ?;
114+ let v = self . eval_const ( child) ?;
113115 ( match * op {
114116 UnaryOperator :: Minus => v. negate ( ) ,
115117 UnaryOperator :: Not => v. unary_not ( ) ,
116118 } )
117119 . map_err ( LintError :: from)
118120 . map_err ( |e| e. at ( child) )
119121 }
120- Expression :: Parenthesis ( child) => self . resolve_const ( child) ,
122+ Expression :: Parenthesis ( child) => self . eval_const ( child) ,
121123 Expression :: Property ( _, _, _)
122124 | Expression :: FunctionCall ( _, _)
123125 | Expression :: ArrayElement ( _, _, _)
@@ -126,11 +128,11 @@ where
126128 }
127129}
128130
129- impl < S > ConstValueResolver < Box < ExpressionPos > > for S
131+ impl < S > ConstEvaluator < Box < ExpressionPos > > for S
130132where
131133 S : ConstLookup ,
132134{
133- fn resolve_const ( & self , item : & Box < ExpressionPos > ) -> Result < Variant , LintErrorPos > {
134- self . resolve_const ( item. as_ref ( ) )
135+ fn eval_const ( & self , item : & Box < ExpressionPos > ) -> Result < Variant , LintErrorPos > {
136+ self . eval_const ( item. as_ref ( ) )
135137 }
136138}
0 commit comments