Browse Source

- php : fixed haxe.Stack error (issue #11)

Franco Ponticelli 15 years ago
parent
commit
c2a1b8d0de
4 changed files with 9 additions and 8 deletions
  1. 2 2
      genphp.ml
  2. 2 4
      std/Reflect.hx
  3. 4 2
      std/haxe/Stack.hx
  4. 1 0
      std/php/Boot.hx

+ 2 - 2
genphp.ml

@@ -1189,13 +1189,13 @@ and gen_expr ctx e =
 					| _ -> 
 					| _ -> 
 						gen_expr ctx e1) in
 						gen_expr ctx e1) in
 				
 				
-				spr ctx "isset(";
+				spr ctx "(isset(";
 				gen_field_access ctx true e1 s;
 				gen_field_access ctx true e1 s;
 				spr ctx ") ? ";
 				spr ctx ") ? ";
 				gen_field_access ctx true e1 s;
 				gen_field_access ctx true e1 s;
 				spr ctx ": array(";
 				spr ctx ": array(";
 				ob e1.eexpr;
 				ob e1.eexpr;
-				print ctx ", %s\"%s%s\")" p s p;
+				print ctx ", %s\"%s%s\"))" p s p;
 				
 				
 			end)
 			end)
 		| TMono _ ->
 		| TMono _ ->

+ 2 - 4
std/Reflect.hx

@@ -112,14 +112,12 @@ class Reflect {
 		#elseif neko
 		#elseif neko
 			return __dollar__call(func,o,args.__neko());
 			return __dollar__call(func,o,args.__neko());
 		#elseif php
 		#elseif php
-		/*
-			if(__call__("is_string", o)) {
+			if(__call__("is_string", o) && !__call__("is_array", func)) {
 				if(args.length == 0) return __call__("call_user_func", field(o, func));
 				if(args.length == 0) return __call__("call_user_func", field(o, func));
 				else if(args.length == 1) return __call__("call_user_func", field(o, func), args[0]);
 				else if(args.length == 1) return __call__("call_user_func", field(o, func), args[0]);
 				else return __call__("call_user_func", field(o, func), args[0], args[1]);
 				else return __call__("call_user_func", field(o, func), args[0], args[1]);
 			}
 			}
-			*/
-			return __php__("(call_user_func_array(is_callable($func) ? $func : array($o, $func) , $args == null ? array() : $args->»a))");
+			return __call__("call_user_func_array", __call__("is_callable", func) ? func : __call__("array", o, func), (null == args ? __call__("array") : __field__(args, "»a")));
 		#elseif cpp
 		#elseif cpp
          var s:String = func;
          var s:String = func;
          return untyped o.__Field(s).__Run(args);
          return untyped o.__Field(s).__Run(args);

+ 4 - 2
std/haxe/Stack.hx

@@ -177,8 +177,10 @@ class Stack {
 			}
 			}
 			return m;
 			return m;
 		#elseif php
 		#elseif php
-			var a : Array<String> = untyped __php__("$GLOBALS[$s]");
-			var m = new Array();
+			if (!untyped __call__("isset", __var__("GLOBALS", s)))
+				return [];
+			var a : Array<String> = untyped __var__("GLOBALS", s);
+			var m = [];
 			for( i in 0...a.length - ((s == "%s") ? 2 : 0)) {
 			for( i in 0...a.length - ((s == "%s") ? 2 : 0)) {
 				var d = a[i].split("::");
 				var d = a[i].split("::");
 				m.unshift(Method(d[0],d[1]));
 				m.unshift(Method(d[0],d[1]));

+ 1 - 0
std/php/Boot.hx

@@ -715,6 +715,7 @@ class _hx_lambda {
 		}
 		}
 		for($»i = 0; $»i < count($this->args); $»i++)
 		for($»i = 0; $»i < count($this->args); $»i++)
 			${$this->args[$»i]} =& $this->params[$»i];
 			${$this->args[$»i]} =& $this->params[$»i];
+		$»this = $this->scope;
 		return eval($this->body);
 		return eval($this->body);
 	}
 	}