mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 21:51:22 +00:00 
			
		
		
		
	Fixes to constants in scope
This commit is contained in:
		
							parent
							
								
									6572d51288
								
							
						
					
					
						commit
						f1d3b30a45
					
				
					 2 changed files with 47 additions and 32 deletions
				
			
		|  | @ -185,51 +185,59 @@ int GDCompiler::_parse_expression(CodeGen& codegen,const GDParser::Node *p_expre | |||
| 
 | ||||
| 			//TRY CLASS CONSTANTS
 | ||||
| 
 | ||||
| 			GDScript *scr = codegen.script; | ||||
| 			GDNativeClass *nc=NULL; | ||||
| 			while(scr) { | ||||
| 			GDScript *owner = codegen.script; | ||||
| 			while (owner) { | ||||
| 
 | ||||
| 				if (scr->constants.has(identifier)) { | ||||
| 				GDScript *scr = owner; | ||||
| 				GDNativeClass *nc=NULL; | ||||
| 				while(scr) { | ||||
| 
 | ||||
| 					//int idx=scr->constants[identifier];
 | ||||
| 					int idx = codegen.get_name_map_pos(identifier); | ||||
| 					return idx|(GDFunction::ADDR_TYPE_CLASS_CONSTANT<<GDFunction::ADDR_BITS); //argument (stack root)
 | ||||
| 					if (scr->constants.has(identifier)) { | ||||
| 
 | ||||
| 						//int idx=scr->constants[identifier];
 | ||||
| 						int idx = codegen.get_name_map_pos(identifier); | ||||
| 						return idx|(GDFunction::ADDR_TYPE_CLASS_CONSTANT<<GDFunction::ADDR_BITS); //argument (stack root)
 | ||||
| 					} | ||||
| 					if (scr->native.is_valid()) | ||||
| 						nc=scr->native.ptr(); | ||||
| 					scr=scr->_base; | ||||
| 				} | ||||
| 				if (scr->native.is_valid()) | ||||
| 					nc=scr->native.ptr(); | ||||
| 				scr=scr->_base; | ||||
| 			} | ||||
| 
 | ||||
| 			// CLASS C++ Integer Constant
 | ||||
| 				// CLASS C++ Integer Constant
 | ||||
| 
 | ||||
| 			if (nc) { | ||||
| 				if (nc) { | ||||
| 
 | ||||
| 				bool success=false; | ||||
| 				int constant = ObjectTypeDB::get_integer_constant(nc->get_name(),identifier,&success); | ||||
| 				if (success) { | ||||
| 					Variant key=constant; | ||||
| 					int idx; | ||||
| 					bool success=false; | ||||
| 					int constant = ObjectTypeDB::get_integer_constant(nc->get_name(),identifier,&success); | ||||
| 					if (success) { | ||||
| 						Variant key=constant; | ||||
| 						int idx; | ||||
| 
 | ||||
| 					if (!codegen.constant_map.has(key)) { | ||||
| 						if (!codegen.constant_map.has(key)) { | ||||
| 
 | ||||
| 						idx=codegen.constant_map.size(); | ||||
| 						codegen.constant_map[key]=idx; | ||||
| 							idx=codegen.constant_map.size(); | ||||
| 							codegen.constant_map[key]=idx; | ||||
| 
 | ||||
| 					} else { | ||||
| 						idx=codegen.constant_map[key]; | ||||
| 						} else { | ||||
| 							idx=codegen.constant_map[key]; | ||||
| 						} | ||||
| 
 | ||||
| 						return idx|(GDFunction::ADDR_TYPE_LOCAL_CONSTANT<<GDFunction::ADDR_BITS); //make it a local constant (faster access)
 | ||||
| 					} | ||||
| 
 | ||||
| 					return idx|(GDFunction::ADDR_TYPE_LOCAL_CONSTANT<<GDFunction::ADDR_BITS); //make it a local constant (faster access)
 | ||||
| 				} | ||||
| 
 | ||||
| 				owner=owner->_owner; | ||||
| 			} | ||||
| 
 | ||||
| 			if (codegen.script->subclasses.has(identifier)) { | ||||
| 			/*
 | ||||
| 			 handled in constants now | ||||
| 			 if (codegen.script->subclasses.has(identifier)) { | ||||
| 				//same with a subclass, make it a local constant.
 | ||||
| 				int idx = codegen.get_constant_pos(codegen.script->subclasses[identifier]); | ||||
| 				return idx|(GDFunction::ADDR_TYPE_LOCAL_CONSTANT<<GDFunction::ADDR_BITS); //make it a local constant (faster access)
 | ||||
| 
 | ||||
| 			} | ||||
| 			}*/ | ||||
| 
 | ||||
| 			if (GDScriptLanguage::get_singleton()->get_global_map().has(identifier)) { | ||||
| 
 | ||||
|  | @ -1457,6 +1465,8 @@ Error GDCompiler::_parse_class(GDScript *p_script,GDScript *p_owner,const GDPars | |||
| 		Error err = _parse_class(subclass.ptr(),p_script,p_class->subclasses[i]); | ||||
| 		if (err) | ||||
| 			return err; | ||||
| 
 | ||||
| 		p_script->constants.insert(name,subclass); //once parsed, goes to the list of constants
 | ||||
| 		p_script->subclasses.insert(name,subclass); | ||||
| 
 | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Juan Linietsky
						Juan Linietsky