Example #1
0
        private SymbolTableScope GetTopScope()
        {
            SymbolTableScope tmp_scope = CurScope;

            while (tmp_scope.Parent != null)
            {
                tmp_scope = tmp_scope.Parent;
            }
            return(tmp_scope);
        }
Example #2
0
 public SymbolTableScope(SymbolTableScope parent)
 {
     Parent       = parent;
     Entries      = new Hashtable();
     ClassMembers = new ArrayList();
 }
Example #3
0
 public void CloseScope()
 {
     CurScope = CurScope.Parent;
 }
Example #4
0
        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);
        }
Example #5
0
        public void openScope()
        {
            SymbolTableScope new_scope = new SymbolTableScope(CurScope);

            CurScope = new_scope;
        }
Example #6
0
		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);
		}
Example #7
0
		public SymbolTableScope(SymbolTableScope parent) {
			Parent = parent;
			Entries = new Hashtable();
			ClassMembers = new ArrayList();
		}
Example #8
0
		public void CloseScope() {
			CurScope = CurScope.Parent;
		}
Example #9
0
		public void openScope() {
			SymbolTableScope new_scope = new SymbolTableScope(CurScope);
			CurScope = new_scope;
		}