当前位置: 首页>>代码示例>>C++>>正文


C++ CodeGen::alloc_call方法代码示例

本文整理汇总了C++中CodeGen::alloc_call方法的典型用法代码示例。如果您正苦于以下问题:C++ CodeGen::alloc_call方法的具体用法?C++ CodeGen::alloc_call怎么用?C++ CodeGen::alloc_call使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CodeGen的用法示例。


在下文中一共展示了CodeGen::alloc_call方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: _parse_expression


//.........这里部分代码省略.........

			const GDParser::OperatorNode *on = static_cast<const GDParser::OperatorNode*>(p_expression);
			switch(on->op) {


				//call/constructor operator
				case GDParser::OperatorNode::OP_PARENT_CALL: {


					ERR_FAIL_COND_V(on->arguments.size()<1,-1);

					const GDParser::IdentifierNode *in = (const GDParser::IdentifierNode *)on->arguments[0];


					Vector<int> arguments;
					int slevel = p_stack_level;
					for(int i=1;i<on->arguments.size();i++) {

						int ret = _parse_expression(codegen,on->arguments[i],slevel);
						if (ret<0)
							return ret;
						if (ret&GDFunction::ADDR_TYPE_STACK<<GDFunction::ADDR_BITS) {
							slevel++;
							codegen.alloc_stack(slevel);
						}
						arguments.push_back(ret);
					}

					//push call bytecode
					codegen.opcodes.push_back(GDFunction::OPCODE_CALL_SELF_BASE); // basic type constructor

					codegen.opcodes.push_back(codegen.get_name_map_pos(in->name)); //instance
					codegen.opcodes.push_back(arguments.size()); //argument count
					codegen.alloc_call(arguments.size());
					for(int i=0;i<arguments.size();i++)
						codegen.opcodes.push_back(arguments[i]); //arguments

				} break;
				case GDParser::OperatorNode::OP_CALL: {

					if (on->arguments[0]->type==GDParser::Node::TYPE_TYPE) {
						//construct a basic type
						ERR_FAIL_COND_V(on->arguments.size()<1,-1);

						const GDParser::TypeNode *tn = (const GDParser::TypeNode *)on->arguments[0];
						int vtype = tn->vtype;

						Vector<int> arguments;
						int slevel = p_stack_level;
						for(int i=1;i<on->arguments.size();i++) {

							int ret = _parse_expression(codegen,on->arguments[i],slevel);
							if (ret<0)
								return ret;
							if (ret&GDFunction::ADDR_TYPE_STACK<<GDFunction::ADDR_BITS) {
								slevel++;
								codegen.alloc_stack(slevel);
							}
							arguments.push_back(ret);
						}

						//push call bytecode
						codegen.opcodes.push_back(GDFunction::OPCODE_CONSTRUCT); // basic type constructor
						codegen.opcodes.push_back(vtype); //instance
						codegen.opcodes.push_back(arguments.size()); //argument count
						codegen.alloc_call(arguments.size());
开发者ID:HiddenDark,项目名称:godot,代码行数:67,代码来源:gd_compiler.cpp


注:本文中的CodeGen::alloc_call方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。