Changeset 176 for trunk/blade/BladeVisitor.d
- Timestamp:
- 01/16/08 05:01:53 (11 months ago)
- Files:
-
- trunk/blade/BladeVisitor.d (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/blade/BladeVisitor.d
r175 r176 20 20 V.ReturnType beginVisit(V)(V visitor, char [] expr) 21 21 { 22 if ( exprLength(expr)==expr.length) {23 return doVisit(visitor, expr); //22 if (isSimpleExpr(expr)) { 23 return doVisit(visitor, expr); 24 24 } else return doVisit(visitor, "(" ~ expr ~ ")"); 25 25 } … … 127 127 } 128 128 129 // Return true if the function is a single variable, or an intrinsic. 130 bool isSimpleExpr(char [] s) 131 { 132 if (s.length==1) return true; 133 if (s[0]<'a' || s[0]>'z') return false; 134 return exprLength(s)==s.length; 135 } 136 129 137 unittest { 130 138 assert(exprLength("A*B")==1); … … 142 150 bool expressionContainsAssignment(char [] expr) 143 151 { 152 if (isSimpleExpr(expr)) return false; 144 153 // BUG: also need to deal with comma, ?:, &&, ||, is, !is, in, 145 154 // unary &, unary ! 146 155 if (expr.length>1 && expr[0]=='(') expr = expr[1..$-1]; 147 else if (expr.length==1 && ((expr[0]>='A' && expr[0]<='Z') || expr[0]=='$')){148 return false;149 }150 if (expr.length>3 && (expr[0]>='a' && expr[1]<='z')) { // function151 return false;152 }153 156 if (expr.length>2 && (expr[0..2]=="++" || expr[0..2]=="--")) { 154 157 return false; … … 158 161 } 159 162 if (expr.length>2 && (expr[$-2..$]=="++" || expr[$-2..$]=="--")) { 160 return false; // BUG: actually this isan assignment163 return false; // BUG: actually this _is_ an assignment 161 164 } 162 165 int y = exprLength(expr);
