src/ai/api/squirrel_export.awk
branchnoai
changeset 9572 6a78470c53f3
parent 9567 d73c84a7875d
child 9583 c233c2897a45
equal deleted inserted replaced
9571:e3e55bb09f12 9572:6a78470c53f3
    20 	enum_size = 0
    20 	enum_size = 0
    21 	enum_value_size = 0
    21 	enum_value_size = 0
    22 	struct_size = 0
    22 	struct_size = 0
    23 	method_size = 0
    23 	method_size = 0
    24 	static_method_size = 0
    24 	static_method_size = 0
       
    25 	virtual_class = "false"
    25 	cls = ""
    26 	cls = ""
    26 	start_squirrel_define_on_next_line = "false"
    27 	start_squirrel_define_on_next_line = "false"
    27 	cls_level = 0
    28 	cls_level = 0
    28 }
    29 }
    29 
    30 
   135 	print "	/* Allow " cls " to be used as Squirrel parameter */"
   136 	print "	/* Allow " cls " to be used as Squirrel parameter */"
   136 	print "	template <> " cls " *GetParam(ForceType<" cls " *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" cls " *)instance; }"
   137 	print "	template <> " cls " *GetParam(ForceType<" cls " *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" cls " *)instance; }"
   137 	# TODO returning...
   138 	# TODO returning...
   138 
   139 
   139 	print "}; // namespace SQConvert"
   140 	print "}; // namespace SQConvert"
   140 	print "";
   141 
   141 
   142 	if (virtual_class == "false") {
   142 	# Then do the registration functions of the class. */
   143 		print "";
   143 	print "void SQ" cls "Register(Squirrel *engine) {"
   144 		# Then do the registration functions of the class. */
   144 	print "	DefSQClass <" cls "> SQ" cls "(\"" cls "\");"
   145 		print "void SQ" cls "Register(Squirrel *engine) {"
   145 	print "	SQ" cls ".PreRegister(engine);"
   146 		print "	DefSQClass <" cls "> SQ" cls "(\"" cls "\");"
   146 	print "	SQ" cls ".AddConstructor(engine);"
   147 		print "	SQ" cls ".PreRegister(engine);"
   147 	print ""
   148 		print "	SQ" cls ".AddConstructor(engine);"
   148 
   149 		print ""
   149 	# Enum values
   150 
   150 	mlen = 0
   151 		# Enum values
   151 	for (i = 1; i <= enum_value_size; i++) {
   152 		mlen = 0
   152 		if (mlen <= length(enum_value[i])) mlen = length(enum_value[i])
   153 		for (i = 1; i <= enum_value_size; i++) {
   153 	}
   154 			if (mlen <= length(enum_value[i])) mlen = length(enum_value[i])
   154 	for (i = 1; i <= enum_value_size; i++) {
   155 		}
   155 		print "	SQ" cls ".DefSQConst(engine, " cls "::" enum_value[i] ", " substr(spaces, 1, mlen - length(enum_value[i])) "\""  enum_value[i] "\");"
   156 		for (i = 1; i <= enum_value_size; i++) {
   156 		delete enum_value[i]
   157 			print "	SQ" cls ".DefSQConst(engine, " cls "::" enum_value[i] ", " substr(spaces, 1, mlen - length(enum_value[i])) "\""  enum_value[i] "\");"
   157 	}
   158 			delete enum_value[i]
   158 	if (enum_value_size != 0) print ""
   159 		}
   159 
   160 		if (enum_value_size != 0) print ""
   160 	# Static methods
   161 
   161 	mlen = 0
   162 		# Static methods
   162 	for (i = 1; i <= static_method_size; i++) {
   163 		mlen = 0
   163 		if (mlen <= length(static_methods[i, 0])) mlen = length(static_methods[i, 0])
   164 		for (i = 1; i <= static_method_size; i++) {
   164 	}
   165 			if (mlen <= length(static_methods[i, 0])) mlen = length(static_methods[i, 0])
   165 	for (i = 1; i <= static_method_size; i++) {
   166 		}
   166 		print "	SQ" cls ".DefSQStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "\""  static_methods[i, 0] "\", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "" static_methods[i, 1] ", \"" static_methods[i, 2] "\");"
   167 		for (i = 1; i <= static_method_size; i++) {
   167 		delete static_methods[i]
   168 			print "	SQ" cls ".DefSQStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "\""  static_methods[i, 0] "\", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "" static_methods[i, 1] ", \"" static_methods[i, 2] "\");"
   168 	}
   169 			delete static_methods[i]
   169 	if (static_method_size != 0) print ""
   170 		}
   170 
   171 		if (static_method_size != 0) print ""
   171 	# Non-static methods
   172 
   172 	mlen = 0
   173 		# Non-static methods
   173 	for (i = 1; i <= method_size; i++) {
   174 		mlen = 0
   174 		if (mlen <= length(methods[i, 0])) mlen = length(methods[i, 0])
   175 		for (i = 1; i <= method_size; i++) {
   175 	}
   176 			if (mlen <= length(methods[i, 0])) mlen = length(methods[i, 0])
   176 	for (i = 1; i <= method_size; i++) {
   177 		}
   177 		print "	SQ" cls ".DefSQMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0])) "\""  methods[i, 0] "\", " substr(spaces, 1, mlen - length(methods[i, 0])) "" methods[i, 1] ", \"" methods[i, 2] "\");"
   178 		for (i = 1; i <= method_size; i++) {
   178 		delete methods[i]
   179 			print "	SQ" cls ".DefSQMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0])) "\""  methods[i, 0] "\", " substr(spaces, 1, mlen - length(methods[i, 0])) "" methods[i, 1] ", \"" methods[i, 2] "\");"
   179 	}
   180 			delete methods[i]
   180 	if (method_size != 0) print ""
   181 		}
   181 
   182 		if (method_size != 0) print ""
   182 	print "	SQ" cls ".PostRegister(engine);"
   183 
   183 	print "}"
   184 		print "	SQ" cls ".PostRegister(engine);"
       
   185 		print "}"
       
   186 	}
   184 
   187 
   185 	print "#endif /* DEFINE_SQUIRREL_CLASS */"
   188 	print "#endif /* DEFINE_SQUIRREL_CLASS */"
   186 
   189 
   187 	enum_size = 0
   190 	enum_size = 0
   188 	enum_value_size = 0
   191 	enum_value_size = 0
   189 	struct_size = 0
   192 	struct_size = 0
   190 	method_size = 0
   193 	method_size = 0
   191 	static_method_size = 0
   194 	static_method_size = 0
       
   195 	virtual_class = "false"
   192 	cls = ""
   196 	cls = ""
   193 	start_squirrel_define_on_next_line = "false"
   197 	start_squirrel_define_on_next_line = "false"
   194 	cls_level = 0
   198 	cls_level = 0
   195 }
   199 }
   196 
   200 
   209 # Add a method to the list
   213 # Add a method to the list
   210 /^.*$/ {
   214 /^.*$/ {
   211 	if (cls_level != 1) next
   215 	if (cls_level != 1) next
   212 
   216 
   213 	is_static = match($0, "static")
   217 	is_static = match($0, "static")
       
   218 	if (match($0, "virtual")) {
       
   219 		virtual_class = "true"
       
   220 	}
   214 	gsub("virtual", "", $0)
   221 	gsub("virtual", "", $0)
   215 	gsub("static", "", $0)
   222 	gsub("static", "", $0)
   216 	gsub("const", "", $0)
   223 	gsub("const", "", $0)
   217 	param_s = $0
   224 	param_s = $0
   218 	gsub("\\*", "", $0)
   225 	gsub("\\*", "", $0)