Browse Source

Support negative number literals

Evan Miller 12 years ago
parent
commit
4ebc0697f6
2 changed files with 6 additions and 0 deletions
  1. 4 0
      src/erlydtl_scanner.erl
  2. 2 0
      tests/src/erlydtl_unittests.erl

+ 4 - 0
src/erlydtl_scanner.erl

@@ -251,6 +251,8 @@ scan([H | T], Scanned, {Row, Column}, {in_code, Closer}) ->
     case char_type(H) of
     case char_type(H) of
         letter_underscore ->
         letter_underscore ->
             scan(T, [{identifier, {Row, Column}, [H]} | Scanned], {Row, Column + 1}, {in_identifier, Closer});
             scan(T, [{identifier, {Row, Column}, [H]} | Scanned], {Row, Column + 1}, {in_identifier, Closer});
+        hyphen_minus ->
+            scan(T, [{number_literal, {Row, Column}, [H]} | Scanned], {Row, Column + 1}, {in_number, Closer});
         digit ->
         digit ->
             scan(T, [{number_literal, {Row, Column}, [H]} | Scanned], {Row, Column + 1}, {in_number, Closer});
             scan(T, [{number_literal, {Row, Column}, [H]} | Scanned], {Row, Column + 1}, {in_number, Closer});
         _ ->
         _ ->
@@ -291,6 +293,8 @@ char_type(C) when ((C >= $a) andalso (C =< $z)) orelse ((C >= $A) andalso (C =<
     letter_underscore;
     letter_underscore;
 char_type(C) when ((C >= $0) andalso (C =< $9)) ->
 char_type(C) when ((C >= $0) andalso (C =< $9)) ->
     digit;
     digit;
+char_type($-) ->
+    hyphen_minus;
 char_type(_C) ->
 char_type(_C) ->
     undefined.
     undefined.
 
 

+ 2 - 0
tests/src/erlydtl_unittests.erl

@@ -177,6 +177,8 @@ tests() ->
         {"if size comparison", [
         {"if size comparison", [
                 {"If int greater than number literal",
                 {"If int greater than number literal",
                     <<"{% if var1 > 2 %}yay{% endif %}">>, [{var1, 3}], <<"yay">>},
                     <<"{% if var1 > 2 %}yay{% endif %}">>, [{var1, 3}], <<"yay">>},
+                {"If int greater than negative number literal",
+                    <<"{% if var1 > -2 %}yay{% endif %}">>, [{var1, -1}], <<"yay">>},
                 {"If int greater than number literal (false)",
                 {"If int greater than number literal (false)",
                     <<"{% if var1 > 2 %}yay{% endif %}">>, [{var1, 2}], <<"">>},
                     <<"{% if var1 > 2 %}yay{% endif %}">>, [{var1, 2}], <<"">>},