Преглед на файлове

[lexer] explicitly list all keywords so we don't Hashtbl so much

Simon Krajewski преди 7 години
родител
ревизия
5fc66d0866
променени са 3 файла, в които са добавени 66 реда и са изтрити 12 реда
  1. 55 1
      src/syntax/lexer.ml
  2. 4 4
      std/js/html/svg/FECompositeElement.hx
  3. 7 7
      std/js/html/svg/FEMorphologyElement.hx

+ 55 - 1
src/syntax/lexer.ml

@@ -244,7 +244,10 @@ let mk lexbuf t =
 
 let mk_ident lexbuf =
 	let s = lexeme lexbuf in
-	mk lexbuf (try Kwd (Hashtbl.find keywords s) with Not_found -> Const (Ident s))
+	mk lexbuf (Const (Ident s))
+
+let mk_keyword lexbuf kwd =
+	mk lexbuf (Kwd kwd)
 
 let invalid_char lexbuf =
 	error (Invalid_character (lexeme_char lexbuf 0)) (lexeme_start lexbuf)
@@ -379,6 +382,57 @@ let rec token lexbuf =
 		let v = lexeme lexbuf in
 		let v = String.sub v 1 (String.length v - 1) in
 		mk lexbuf (Dollar v)
+	(* type decl *)
+	| "package" -> mk_keyword lexbuf Package
+	| "import" -> mk_keyword lexbuf Import
+	| "using" -> mk_keyword lexbuf Using
+	| "class" -> mk_keyword lexbuf Class
+	| "interface" -> mk_keyword lexbuf Interface
+	| "enum" -> mk_keyword lexbuf Enum
+	| "abstract" -> mk_keyword lexbuf Abstract
+	| "typedef" -> mk_keyword lexbuf Typedef
+	(* relations *)
+	| "extends" -> mk_keyword lexbuf Extends
+	| "implements" -> mk_keyword lexbuf Implements
+	(* modifier *)
+	| "extern" -> mk_keyword lexbuf Extern
+	| "static" -> mk_keyword lexbuf Static
+	| "public" -> mk_keyword lexbuf Public
+	| "private" -> mk_keyword lexbuf Private
+	| "override" -> mk_keyword lexbuf Override
+	| "dynamic" -> mk_keyword lexbuf Dynamic
+	| "inline" -> mk_keyword lexbuf Inline
+	| "macro" -> mk_keyword lexbuf Macro
+	| "final" -> mk_keyword lexbuf Final
+	| "operator" -> mk_keyword lexbuf Operator
+	| "overload" -> mk_keyword lexbuf Overload
+	(* fields *)
+	| "function" -> mk_keyword lexbuf Function
+	| "var" -> mk_keyword lexbuf Var
+	(* values *)
+	| "null" -> mk_keyword lexbuf Null
+	| "true" -> mk_keyword lexbuf True
+	| "false" -> mk_keyword lexbuf False
+	| "this" -> mk_keyword lexbuf This
+	(* expr *)
+	| "if" -> mk_keyword lexbuf If
+	| "else" -> mk_keyword lexbuf Else
+	| "while" -> mk_keyword lexbuf While
+	| "do" -> mk_keyword lexbuf Do
+	| "for" -> mk_keyword lexbuf For
+	| "break" -> mk_keyword lexbuf Break
+	| "continue" -> mk_keyword lexbuf Continue
+	| "return" -> mk_keyword lexbuf Return
+	| "switch" -> mk_keyword lexbuf Switch
+	| "case" -> mk_keyword lexbuf Case
+	| "default" -> mk_keyword lexbuf Default
+	| "throw" -> mk_keyword lexbuf Throw
+	| "try" -> mk_keyword lexbuf Try
+	| "catch" -> mk_keyword lexbuf Catch
+	| "untyped" -> mk_keyword lexbuf Untyped
+	| "new" -> mk_keyword lexbuf New
+	| "in" -> mk_keyword lexbuf In
+	| "cast" -> mk_keyword lexbuf Cast
 	| ident -> mk_ident lexbuf
 	| idtype -> mk lexbuf (Const (Ident (lexeme lexbuf)))
 	| _ -> invalid_char lexbuf

+ 4 - 4
std/js/html/svg/FECompositeElement.hx

@@ -41,14 +41,14 @@ extern class FECompositeElement extends Element
 	static inline var SVG_FECOMPOSITE_OPERATOR_ATOP : Int = 4;
 	static inline var SVG_FECOMPOSITE_OPERATOR_XOR : Int = 5;
 	static inline var SVG_FECOMPOSITE_OPERATOR_ARITHMETIC : Int = 6;
-	
-	
+
+
 	/**
 		An `SVGAnimatedString` corresponding to the `in` attribute of the given element.
 	**/
 	var in1(default,null) : AnimatedString;
 	var in2(default,null) : AnimatedString;
-	var operator(default,null) : AnimatedEnumeration;
+	@:native("operator") var operator_(default,null) : AnimatedEnumeration;
 	var k1(default,null) : AnimatedNumber;
 	var k2(default,null) : AnimatedNumber;
 	var k3(default,null) : AnimatedNumber;
@@ -58,5 +58,5 @@ extern class FECompositeElement extends Element
 	var width(default,null) : AnimatedLength;
 	var height(default,null) : AnimatedLength;
 	var result(default,null) : AnimatedString;
-	
+
 }

+ 7 - 7
std/js/html/svg/FEMorphologyElement.hx

@@ -37,23 +37,23 @@ extern class FEMorphologyElement extends Element
 	static inline var SVG_MORPHOLOGY_OPERATOR_UNKNOWN : Int = 0;
 	static inline var SVG_MORPHOLOGY_OPERATOR_ERODE : Int = 1;
 	static inline var SVG_MORPHOLOGY_OPERATOR_DILATE : Int = 2;
-	
-	
+
+
 	/**
 		An `SVGAnimatedString` corresponding to the `in` attribute of the given element.
 	**/
 	var in1(default,null) : AnimatedString;
-	
+
 	/**
 		An `SVGAnimatedEnumeration` corresponding to the `operator` attribute of the given element. It takes one of the `SVG_MORPHOLOGY_OPERATOR_*` constants defined on this interface.
 	**/
-	var operator(default,null) : AnimatedEnumeration;
-	
+	@:native("operator") var operator_(default,null) : AnimatedEnumeration;
+
 	/**
 		An `SVGAnimatedNumber` corresponding to the X component of the `radius` attribute of the given element.
 	**/
 	var radiusX(default,null) : AnimatedNumber;
-	
+
 	/**
 		An `SVGAnimatedNumber` corresponding to the Y component of the `radius` attribute of the given element.
 	**/
@@ -63,5 +63,5 @@ extern class FEMorphologyElement extends Element
 	var width(default,null) : AnimatedLength;
 	var height(default,null) : AnimatedLength;
 	var result(default,null) : AnimatedString;
-	
+
 }