浏览代码

added neko buffer_get_length support (close #9)

Nicolas Cannasse 12 年之前
父节点
当前提交
2155510720
共有 2 个文件被更改,包括 8 次插入2 次删除
  1. 5 0
      interp.ml
  2. 3 2
      std/neko/_std/StringBuf.hx

+ 5 - 0
interp.ml

@@ -1143,6 +1143,11 @@ let std_lib =
 			| VAbstract (ABuffer b) -> Buffer.reset b; VNull;
 			| _ -> error()
 		);
+		"buffer_get_length", Fun1 (fun b ->
+			match b with
+			| VAbstract (ABuffer b) -> VInt (Buffer.length b)
+			| _ -> error()
+		);
 	(* date *)
 		"date_now", Fun0 (fun () ->
 			make_date (Unix.time())

+ 3 - 2
std/neko/_std/StringBuf.hx

@@ -29,8 +29,8 @@
 		b = __make();
 	}
 
-	inline function get_length() : Int {
-		return untyped __dollar__ssize( __to_string(b) );
+	function get_length() : Int {
+		return __get_length == null ? untyped __dollar__ssize( __to_string(b) ) : __get_length(b);
 	}
 
 	public inline function add( x : Dynamic ) : Void {
@@ -54,5 +54,6 @@
 	static var __add_char : Dynamic = neko.Lib.load("std","buffer_add_char",2);
 	static var __add_sub : Dynamic = neko.Lib.load("std","buffer_add_sub",4);
 	static var __to_string : Dynamic = neko.Lib.load("std","buffer_string",1);
+	static var __get_length : Dynamic = try neko.Lib.load("std","buffer_get_length",1) catch( e : Dynamic ) null;
 
 }