private SymbolTableScope GetTopScope() { SymbolTableScope tmp_scope = CurScope; while (tmp_scope.Parent != null) { tmp_scope = tmp_scope.Parent; } return(tmp_scope); }
public SymbolTableScope(SymbolTableScope parent) { Parent = parent; Entries = new Hashtable(); ClassMembers = new ArrayList(); }
public void CloseScope() { CurScope = CurScope.Parent; }
private SymbolTable() { CurScope = new SymbolTableScope(null); ExternalAssemblies = new ArrayList(); ExternalTypesAvailable = new Hashtable(); // collect namespaces of common assemblies ExternalNamespaces = new Hashtable(); ArrayList assemblies = new ArrayList(); assemblies.AddRange(System.AppDomain.CurrentDomain.GetAssemblies()); assemblies.Add(Assembly.LoadFrom("mPHPRuntime.dll")); foreach (Assembly ass in assemblies) { if (ass.GetName().Name != "mPHP") { try { // the following if clause is a workaround as Mono returns null for ass.GetTypes() on the dymanic assembly to be created if (ass.GetTypes() != null) { foreach (Type t in ass.GetTypes()) { string name_space = (t.Namespace == null) ? "__root" : t.Namespace; ArrayList typesOfNamespace = (ArrayList)ExternalNamespaces[name_space]; if (typesOfNamespace == null) { typesOfNamespace = new ArrayList(); ExternalNamespaces[name_space] = typesOfNamespace; } typesOfNamespace.Add(t); } } } catch (ReflectionTypeLoadException) { // when using .NET Framework ass.GetTypes() throws a ReflectionTypeLoadException when trying to get the types of the dynamic module to be created continue; } } } // insert reserved words InsertGlobal("__MAIN", RESERVED_WORD); InsertGlobal("and", RESERVED_WORD); InsertGlobal("or", RESERVED_WORD); InsertGlobal("xor", RESERVED_WORD); InsertGlobal("__FILE__", RESERVED_WORD); InsertGlobal("exception", RESERVED_WORD); InsertGlobal("__LINE__", RESERVED_WORD); InsertGlobal("array", RESERVED_WORD); InsertGlobal("as", RESERVED_WORD); InsertGlobal("break", RESERVED_WORD); InsertGlobal("case", RESERVED_WORD); InsertGlobal("class", RESERVED_WORD); InsertGlobal("const", RESERVED_WORD); InsertGlobal("continue", RESERVED_WORD); InsertGlobal("declare", RESERVED_WORD); InsertGlobal("default", RESERVED_WORD); InsertGlobal("die", RESERVED_WORD); InsertGlobal("do", RESERVED_WORD); InsertGlobal("echo", RESERVED_WORD); InsertGlobal("else", RESERVED_WORD); InsertGlobal("elseif", RESERVED_WORD); InsertGlobal("empty", RESERVED_WORD); InsertGlobal("enddeclare", RESERVED_WORD); InsertGlobal("endfor", RESERVED_WORD); InsertGlobal("endforeach", RESERVED_WORD); InsertGlobal("endif", RESERVED_WORD); InsertGlobal("endswitch", RESERVED_WORD); InsertGlobal("endwhile", RESERVED_WORD); InsertGlobal("eval", RESERVED_WORD); InsertGlobal("exit", RESERVED_WORD); InsertGlobal("for", RESERVED_WORD); InsertGlobal("foreach", RESERVED_WORD); InsertGlobal("function", RESERVED_WORD); InsertGlobal("global", RESERVED_WORD); InsertGlobal("if", RESERVED_WORD); InsertGlobal("include", RESERVED_WORD); InsertGlobal("include_once", RESERVED_WORD); InsertGlobal("isset", RESERVED_WORD); InsertGlobal("list", RESERVED_WORD); InsertGlobal("new", RESERVED_WORD); InsertGlobal("print", RESERVED_WORD); InsertGlobal("require", RESERVED_WORD); InsertGlobal("require_once", RESERVED_WORD); InsertGlobal("return", RESERVED_WORD); InsertGlobal("static", RESERVED_WORD); InsertGlobal("switch", RESERVED_WORD); InsertGlobal("unset", RESERVED_WORD); InsertGlobal("use", RESERVED_WORD); InsertGlobal("var", RESERVED_WORD); InsertGlobal("while", RESERVED_WORD); InsertGlobal("__FUNCTION__", RESERVED_WORD); InsertGlobal("__CLASS__", RESERVED_WORD); InsertGlobal("__METHOD__", RESERVED_WORD); InsertGlobal("final", RESERVED_WORD); InsertGlobal("php_user_filter", RESERVED_WORD); InsertGlobal("interface", RESERVED_WORD); InsertGlobal("implements", RESERVED_WORD); InsertGlobal("extends", RESERVED_WORD); InsertGlobal("public", RESERVED_WORD); InsertGlobal("private", RESERVED_WORD); InsertGlobal("protected", RESERVED_WORD); InsertGlobal("abstract", RESERVED_WORD); InsertGlobal("clone", RESERVED_WORD); InsertGlobal("try", RESERVED_WORD); InsertGlobal("catch", RESERVED_WORD); InsertGlobal("throw", RESERVED_WORD); }
public void openScope() { SymbolTableScope new_scope = new SymbolTableScope(CurScope); CurScope = new_scope; }
private SymbolTable() { CurScope = new SymbolTableScope(null); ExternalAssemblies = new ArrayList(); ExternalTypesAvailable = new Hashtable(); // collect namespaces of common assemblies ExternalNamespaces = new Hashtable(); ArrayList assemblies = new ArrayList(); assemblies.AddRange(System.AppDomain.CurrentDomain.GetAssemblies()); assemblies.Add(Assembly.LoadFrom("mPHPRuntime.dll")); foreach (Assembly ass in assemblies) { if (ass.GetName().Name != "mPHP") try { // the following if clause is a workaround as Mono returns null for ass.GetTypes() on the dymanic assembly to be created if (ass.GetTypes() != null) foreach (Type t in ass.GetTypes()) { string name_space = (t.Namespace == null) ? "__root" : t.Namespace; ArrayList typesOfNamespace = (ArrayList)ExternalNamespaces[name_space]; if (typesOfNamespace == null) { typesOfNamespace = new ArrayList(); ExternalNamespaces[name_space] = typesOfNamespace; } typesOfNamespace.Add(t); } } catch (ReflectionTypeLoadException) { // when using .NET Framework ass.GetTypes() throws a ReflectionTypeLoadException when trying to get the types of the dynamic module to be created continue; } } // insert reserved words InsertGlobal("__MAIN", RESERVED_WORD); InsertGlobal("and", RESERVED_WORD); InsertGlobal("or", RESERVED_WORD); InsertGlobal("xor", RESERVED_WORD); InsertGlobal("__FILE__", RESERVED_WORD); InsertGlobal("exception", RESERVED_WORD); InsertGlobal("__LINE__", RESERVED_WORD); InsertGlobal("array", RESERVED_WORD); InsertGlobal("as", RESERVED_WORD); InsertGlobal("break", RESERVED_WORD); InsertGlobal("case", RESERVED_WORD); InsertGlobal("class", RESERVED_WORD); InsertGlobal("const", RESERVED_WORD); InsertGlobal("continue", RESERVED_WORD); InsertGlobal("declare", RESERVED_WORD); InsertGlobal("default", RESERVED_WORD); InsertGlobal("die", RESERVED_WORD); InsertGlobal("do", RESERVED_WORD); InsertGlobal("echo", RESERVED_WORD); InsertGlobal("else", RESERVED_WORD); InsertGlobal("elseif", RESERVED_WORD); InsertGlobal("empty", RESERVED_WORD); InsertGlobal("enddeclare", RESERVED_WORD); InsertGlobal("endfor", RESERVED_WORD); InsertGlobal("endforeach", RESERVED_WORD); InsertGlobal("endif", RESERVED_WORD); InsertGlobal("endswitch", RESERVED_WORD); InsertGlobal("endwhile", RESERVED_WORD); InsertGlobal("eval", RESERVED_WORD); InsertGlobal("exit", RESERVED_WORD); InsertGlobal("for", RESERVED_WORD); InsertGlobal("foreach", RESERVED_WORD); InsertGlobal("function", RESERVED_WORD); InsertGlobal("global", RESERVED_WORD); InsertGlobal("if", RESERVED_WORD); InsertGlobal("include", RESERVED_WORD); InsertGlobal("include_once", RESERVED_WORD); InsertGlobal("isset", RESERVED_WORD); InsertGlobal("list", RESERVED_WORD); InsertGlobal("new", RESERVED_WORD); InsertGlobal("print", RESERVED_WORD); InsertGlobal("require", RESERVED_WORD); InsertGlobal("require_once", RESERVED_WORD); InsertGlobal("return", RESERVED_WORD); InsertGlobal("static", RESERVED_WORD); InsertGlobal("switch", RESERVED_WORD); InsertGlobal("unset", RESERVED_WORD); InsertGlobal("use", RESERVED_WORD); InsertGlobal("var", RESERVED_WORD); InsertGlobal("while", RESERVED_WORD); InsertGlobal("__FUNCTION__", RESERVED_WORD); InsertGlobal("__CLASS__", RESERVED_WORD); InsertGlobal("__METHOD__", RESERVED_WORD); InsertGlobal("final", RESERVED_WORD); InsertGlobal("php_user_filter", RESERVED_WORD); InsertGlobal("interface", RESERVED_WORD); InsertGlobal("implements", RESERVED_WORD); InsertGlobal("extends", RESERVED_WORD); InsertGlobal("public", RESERVED_WORD); InsertGlobal("private", RESERVED_WORD); InsertGlobal("protected", RESERVED_WORD); InsertGlobal("abstract", RESERVED_WORD); InsertGlobal("clone", RESERVED_WORD); InsertGlobal("try", RESERVED_WORD); InsertGlobal("catch", RESERVED_WORD); InsertGlobal("throw", RESERVED_WORD); }