Explorar el Código

allowed $ identifier

Nicolas Cannasse hace 14 años
padre
commit
75393eb740
Se han modificado 4 ficheros con 9 adiciones y 0 borrados
  1. 2 0
      ast.ml
  2. 1 0
      doc/CHANGES.txt
  3. 5 0
      lexer.mll
  4. 1 0
      parser.ml

+ 2 - 0
ast.ml

@@ -125,6 +125,7 @@ type token =
 	| Macro of string
 	| Question
 	| At
+	| Dollar of string
 
 type unop_flag =
 	| Prefix
@@ -403,6 +404,7 @@ let s_token = function
 	| Macro s -> "#" ^ s
 	| Question -> "?"
 	| At -> "@"
+	| Dollar v -> "$" ^ v
 
 let unescape s =
 	let b = Buffer.create 0 in

+ 1 - 0
doc/CHANGES.txt

@@ -27,6 +27,7 @@
 	all : added -D macrotimes support
 	all : added untyped __this__ support (prepare for 'this' spec. change)
 	flash9 : store resources in bytes tag instead of bytecode
+	all : allow $ prefixed identifiers (for macros usage only)
 
 2011-01-30: 2.07
 	all : fixed completion support with --remap

+ 5 - 0
lexer.mll

@@ -251,6 +251,11 @@ and token = parse
 			let v = String.sub v 1 (String.length v - 1) in
 			mk lexbuf (Macro v)
 		}
+	| '$' ['_' 'a'-'z' 'A'-'Z' '0'-'9']* {
+			let v = lexeme lexbuf in
+			let v = String.sub v 1 (String.length v - 1) in
+			mk lexbuf (Dollar v)
+		}
 	| ident { mk_ident lexbuf }
 	| idtype { mk lexbuf (Const (Type (lexeme lexbuf))) }
 	| _ { invalid_char lexbuf }

+ 1 - 0
parser.ml

@@ -632,6 +632,7 @@ and expr = parser
 	| [< '(Kwd Try,p1); e = expr; cl = plist (parse_catch e); s >] -> (ETry (e,cl),p1)
 	| [< '(IntInterval i,p1); e2 = expr >] -> make_binop OpInterval (EConst (Int i),p1) e2
 	| [< '(Kwd Untyped,p1); e = expr >] -> (EUntyped e,punion p1 (pos e))
+	| [< '(Dollar v,p); s >] -> expr_next (EConst (Ident ("$"^v)),p) s
 
 and expr_next e1 = parser
 	| [< '(Dot,p); s >] ->